{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train=train[\"interest_level\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 49352 entries, 0 to 49351\n",
      "Columns: 228 entries, bathrooms to interest_level\n",
      "dtypes: float64(9), int64(219)\n",
      "memory usage: 85.8 MB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day  ...   virtual  walk  walls  war  washer  water  \\\n",
       "0       4.5  2016      6   24  ...         0     0      0    0       0      0   \n",
       "1       3.0  2016      6   12  ...         0     0      0    0       0      0   \n",
       "2       2.0  2016      4   17  ...         0     0      0    0       0      0   \n",
       "3       2.0  2016      4   18  ...         0     0      0    0       0      0   \n",
       "4       5.0  2016      4   28  ...         0     0      0    1       0      0   \n",
       "\n",
       "   wheelchair  wifi  windows  work  \n",
       "0           0     0        0     0  \n",
       "1           0     0        0     0  \n",
       "2           0     0        0     0  \n",
       "3           0     0        0     0  \n",
       "4           0     0        0     0  \n",
       "\n",
       "[5 rows x 227 columns]"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train=train.drop(\"interest_level\",axis=1)\n",
    "x_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 0, ..., 2, 2, 2], dtype=int64)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train=np.array(x_train)\n",
    "y_train=np.array(y_train)\n",
    "y_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 3\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#params = {\"objective\": \"multi:softprob\", \"eval_metric\":\"mlogloss\", \"num_class\": 9}\n",
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb1, x_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEXCAYAAABCjVgAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3XmcHHWd//HXp7vnvjKTmdwnSYBw\nGTFyqrAKcqgcghEUFVxlXRdv18Vdfx7suuKu67XggQisorCoqIgsKoiiciWROxAIue9zMvfV/fn9\n8a2ZdCY9ySRMT81Mv5+PRz2mu6q6+tPVPf3u+lbVt8zdERERAUjEXYCIiIwcCgUREemjUBARkT4K\nBRER6aNQEBGRPgoFERHpo1AQyWJm/2xmN8Zdh0hcFAqjjJlVmtlqM3tH1rgqM1trZhdnjVtoZneb\n2S4zazSzZWb2RTOrjaZfbmZpM2uJhpVm9vd5rv10M1ufz+c4GLnqcfd/d/f35en5VpvZGflYdj4M\n1/s12tbLWKdQGGXcvQW4EviGmTVEo/8DWOLuPwUws1OAPwB/AY5093HA2UAP8IqsxT3s7pXuXglc\nDPyHmb1yeF6JHAwzS8VdgxQId9cwCgfgFuA24HRgBzA5a9qfgf8+wOMvB/7cb9xjwDuy7p8HPAs0\nEkJmfta0+dG4xmie87KmnQssA5qBDcAngQqgHcgALdEwZYDXdT3w6+jxjwJzBrE+jgR+B+wElgOL\nDqUe4PPArdHjZgEOXAGsA3YBHwBeDTwVvfbrsp5nDvD76P3YDvwIGBdN+2H0XO3Rc31qEOt4NfBP\n0XN1Aqno/obotSwH3pBjXZwEbAaSWeMuBJ6Kbp8ALAGagC3AVwdYp6cD6weYVgP8ANgGrAE+AySi\naUngv6J1sAq4KlqPqQGWtRo4Y4Bp7wdWRO/rXb2fGcCArwFbgd3ROjpmoPc77v/X0TTEXoCGQ3zj\noBbYFP3jXZE1vgJIA6cf4PGXkxUK0RddI3B4dP9woBU4EygCPhX9cxZH91cA/xzdf330D3hE9NhN\nwGuz6jw+uj3gl0xWHbdEXwAnRF+CPwJuP8BjKghf2ldEjzk+Wi9HH2w95A6F7wClwBuBDuAXwARg\navSldFo0/9xofZUADcCDwNezlr3Xl9/+1nHW/E8A04Ey4IjodU7Jqi9nYAIvAWdm3f8JcHV0+2Hg\nXdHtSuCkAZYx4PtFCIRfAlVRHS8AfxtN+wDhS3latL7v4xBCIfpcbY/ezxLgv4EHo2lnAUuBcYSA\nmE/0w2ig91vD4AY1H41S7r6L8AuzHLgza1ItoVlwc+8IM/uPaL9Cq5l9Jmvek6LxLYSthB8CL0bT\n3g782t1/5+7dwFcIX0ynEH6JVgLXunuXu/8euBu4NHpsN3CUmVW7+y53/+tBvrw73f0xd+8hhMKC\nA8z/ZmC1u9/s7j3R8/2M0CQ2FPX8q7t3uPtvCV/it7n7VnffAPwJeCWAu6+I1lenu28Dvgqctp/l\n7m8d9/qmu69z93ZC2JdEr6XI3Ve7+0sDLPs2ovfDzKoIv55vy1ofc82s3t1b3P2Rg1kZZpaMav+0\nuze7+2rClsG7olkWAd9w9/XR5/Tag1l+lncCN7n7X929E/g0cLKZzYpeQxVhC9Hc/Tl335T1+l7O\n+13QFAqjlJldRviFdh/w5axJuwjNFJN7R7j7pzzsV/g54Zd0r0fcfZyHfQqTgKOBf4+mTSE0C/Qu\nI0P4lTo1mrYuGtdrTTQN4CLCl9AaM/ujmZ18kC9vc9btNkIA7c9M4MQo4BrNrJHwhTJpiOrZknW7\nPcf9SgAzm2Bmt5vZBjNrAm4F6vez3P2t417rsqavAD5K2JrZGj3XlAGW/WPgrWZWArwV+Ku79z7X\n3xK2Up43s8Vm9ub91JhLPWELcU3WuOz3f0p23f1uH4z+66eF0DQ3Nfohch2hqXGLmd1gZtXRrC/3\n/S5oCoVRyMwmENpT3w/8HbDIzF4H4O6thHb4tx7MMt19C+HX9VuiURsJX7a9z2mEZowN0bTpZpb9\n+ZkRTcPdF7v7+YQmll8Ad/Q+zcHUdBDWAX+MAq53qHT3vx/mer4ULfM4d68GLiM0bfTq/3z7W8c5\nH+PuP3b310SPc/b+QZA93zLCF+o5wDsIIdE77UV3v5SwPr4M/NTMKgb/MtlO+DU+M2tc3/tPaL6Z\nljVt+kEsO1v/9VMBjGfP5+yb7v4qwo+Zw4F/jMYP9H7LICgURqfrgF+4+wPRJvOngO9FvwqJ7r/X\nzK6OAgQzmwbMHmiBZjaesDPy2WjUHcCbzOwNZlYEfIKws/MhQui0Ap8ysyIzO50QJrebWbGZvdPM\naqImkSZCsweEX9jjzaxmiNZDr7uBw83sXVE9RWb2ajObP8z1VBF2Ijea2VSiL6ksW4DDsu7vbx3v\nw8yOMLPXR+9zB2ErJZ1r3siPgQ8DryPsU+hdzmVm1hBtmTRGowdcjpmVZg+ELdE7gC9Gh0PPBD5O\n2DLqfV0fMbOpZjaOsHP8QIr6PU8qqv8KM1sQveZ/Bx5199XR+3titN5ao/WRPsD7LYMR904NDQc3\nABcQfkGN6zf+fuCLWfdPBO4h/NM3As8AXwTGR9MvJ/yz9B55s5XQ5jwhaxkXEnYY7gb+SLTjNpp2\ndDRudzTPhdH4YuBeQjNWE7AYeE3W424iNAE0MvDRR/+Wdf90DrBzOprvCMIRS9ui5f+esC/ioOoh\n947mVNb868naiU/4IvxM1jpZGq3PJwhf8uuz5j0fWBs91ycHsY5Xs/eO6eMI+36aCTvj7861DrPm\nn0H4Av91v/G3Ru93C+FHwAUDPP706PX3H+YS9l3dGq3vdcBn2XP0UYqwJbuDcPTRxwhbFjbA86zO\n8Rz/Fk37AGGnee/rnRaNfwPhiKMW9hzpVXmg91vDgQeLVrCISF6Y2TnAd9x95gFnltip+UhEhpSZ\nlZnZuWaWiprRPkc4yEFGAW0pyKhgZq8F/i/XNA9HT8kIYWblhKawIwn7PX4NfMTdm2ItTAZFoSAi\nIn3UfCQiIn1GXSdb9fX1PmvWrLjLEBEZVZYuXbrd3RsONN+oC4VZs2axZMmSuMsQERlVzGzNgedS\n85GIiGRRKIiISB+FgoiI9FEoiIhIH4WCiIj0USiIiEgfhYKIiPQpmFBYuWU39zz2LOrWQ0RkYAUT\nCvd979Oce88ptLa1xl2KiMiIVTChcPz8OQA07dhygDlFRApXwYRCUWW4fnrLrq0xVyIiMnIVTCiU\n1oR+oNqbtsVciYjIyFUwoVA+LoRC526FgojIQAomFKpqJwLQ07Ij5kpEREauAgqFCQBk2hQKIiID\nKZhQSBaX0kopifadcZciIjJiFUwoADRbNcmOXXGXISIyYhVUKLQmqynu3h13GSIiI1ZBhUJ7UQ1l\n3Y1xlyEiMmIVVCh0FddSmW6KuwwRkRErb6FgZjeZ2VYze2aA6WZm3zSzFWb2lJkdn69aemVKxlHl\nzfl+GhGRUSufWwq3AGfvZ/o5wLxouBL4dh5rAcDL6qixVto7OvP9VCIio1LeQsHdHwT2d/zn+cAP\nPHgEGGdmk/NVD0CiYjwAjTvVKZ6ISC5x7lOYCqzLur8+GrcPM7vSzJaY2ZJt2w69m4pUb6d4O9Up\nnohILnGGguUYl/MKOO5+g7svdPeFDQ0Nh/yEJdUhFNrU/5GISE5xhsJ6YHrW/WnAxnw+Yfm40NVF\np3pKFRHJKc5QuAt4d3QU0knAbnfflM8nrIz6P+pu3p7PpxERGbVS+Vqwmd0GnA7Um9l64HNAEYC7\nfwe4BzgXWAG0AVfkq5Ze1XWhp9RMi0JBRCSXvIWCu196gOkO/EO+nj+XVFkVbZRibQoFEZFcCuqM\nZoDdVkNRh0JBRCSXgguFlqI6Sjp1TQURkVwKLhQ6iuuo6lH32SIiuRRcKHSX1lOTUU+pIiK5FFwo\nZCoaqKWJNvV/JCKyj4ILhWRlA0lzdm5T/0ciIv0VXCgU1UwCYPeOvJ48LSIyKhVcKJSPC6HQtjOv\nJ0+LiIxKBRcKVfWhd+6u3Wo+EhHpr+BCoaY+9M6dblYoiIj0V3ChUFxZRzdJaNU1FURE+iu4UCCR\nYLdVk2rXWc0iIv0VXigAzUl1dSEikktBhsKmniqK1SmeiMg+CjIUKsZPoYFGQu/dIiLSqyBDIVM5\nmXoaaW5XVxciItkKMhSS4yaTsgzbt2yIuxQRkRGlIEOhtHYaALu3rI25EhGRkaUgQ6GqYToArTvW\nx1yJiMjIUpChUDtpJgDduxQKIiLZCjIUSsdNJo1B8+a4SxERGVEKMhRIpmi0WoraFAoiItkKMxSA\n3UX1lHVsi7sMEZERpWBDob2kgepuhYKISLaCDYXu8kmM9530pDNxlyIiMmIUbChY9WTqrIXtjU1x\nlyIiMmIUbCj8bn146Ts26wQ2EZFeBRsKi15/AgC7t6yOtxARkREkr6FgZmeb2XIzW2FmV+eYPtPM\n7jezp8zsD2Y2LZ/1ZKubMgeAjm2rh+spRURGvLyFgpklgeuBc4CjgEvN7Kh+s30F+IG7HwdcA3wp\nX/X0V9kwC4BM47rhekoRkREvn1sKJwAr3H2lu3cBtwPn95vnKOD+6PYDOabnT3E5jVZDqlk9pYqI\n9MpnKEwFsn+Gr4/GZXsSuCi6fSFQZWbj+y/IzK40syVmtmTbtqE7t6CxeBKVHZuGbHkiIqNdPkPB\ncozrf6mzTwKnmdnjwGnABqBnnwe53+DuC919YUNDw5AV2FY2mdruzboCm4hIJJ+hsB6YnnV/GrAx\newZ33+jub3X3VwL/Eo3bncea9pKumspkdrC7rWu4nlJEZETLZygsBuaZ2WwzKwYuAe7KnsHM6s2s\nt4ZPAzflsZ59pOpmUm6dbNq88cAzi4gUgLyFgrv3AFcBvwGeA+5w92fN7BozOy+a7XRguZm9AEwE\nvpivenIpb5gNwK6NLw3n04qIjFipfC7c3e8B7uk37rNZt38K/DSfNexP7ZQQCm06V0FEBCjgM5oB\nqiYeBkB655qYKxERGRkKOhSsvI52Skk06bKcIiJQ4KGAGTuLJlPRplAQEYFCDwWgtWIa9d0byWR0\nroKISMGHQk/NLKazlS1N7XGXIiISu4IPheKGwyizLjauXx13KSIisSv4UKiecjgAjRteiLkSEZH4\nFXwo1E07AoCOrTqBTUSk4EMhVTeTNAls16q4SxERiV3BhwKpYnYmGyhv0bWaRUQUCkBz2TRquzaq\nC20RKXgKBaC7ZibTfDPbW9SFtogUNoUCUNQwj/HWzKr16kJbRAqbQgGomX4UADvWPBNzJSIi8VIo\nAHUzjwagY9PzMVciIhIvhQJgtbPoJkVq54txlyIiEiuFAkCyiJ3FU6hqXR13JSIisVIoRFqrDmNq\nz3paOnviLkVEJDYKhV7185hpm1m5pTHuSkREYqNQiFRMnU+xpfnP238bdykiIrFRKETGzzwGgPOm\nNsdciYhIfA4YCmY2x8xKotunm9mHzWxc/ksbXqmJRwLgW5fHXImISHwGs6XwMyBtZnOB7wOzgR/n\ntao4lNawKzWBqiYdlioihWswoZBx9x7gQuDr7v4xYHJ+y4pHc83hzEqvZkdLZ9yliIjEYjCh0G1m\nlwLvAe6OxhXlr6T42MSjmWMbeGHjzrhLERGJxWBC4QrgZOCL7r7KzGYDt+a3rHiMm3UcxZZm40r1\ngSQihSl1oBncfRnwYQAzqwWq3P3afBcWh6oZrwCgff3TwJnxFiMiEoPBHH30BzOrNrM64EngZjP7\n6mAWbmZnm9lyM1thZlfnmD7DzB4ws8fN7CkzO/fgX8IQqj+cHhK0rHsq1jJEROIymOajGndvAt4K\n3OzurwLOONCDzCwJXA+cAxwFXGpmR/Wb7TPAHe7+SuAS4FsHU/yQS5XQWDaTub6Wju50rKWIiMRh\nMKGQMrPJwCL27GgejBOAFe6+0t27gNuB8/vN40B1dLsGiP0qN931R3GkrWHZpqa4SxERGXaDCYVr\ngN8AL7n7YjM7DBjMwfxTgXVZ99dH47J9HrjMzNYD9wAfGsRy86pi1quYZttZ/tKquEsRERl2BwwF\nd/+Jux/n7n8f3V/p7hcNYtmWa3H97l8K3OLu04BzgR+a2T41mdmVZrbEzJZs27ZtEE996KoOezUA\nTauW5PV5RERGosHsaJ5mZj83s61mtsXMfmZm0wax7PXA9Kz709i3eehvgTsA3P1hoBSo778gd7/B\n3Re6+8KGhoZBPPWhs8nhCKSiLU/m9XlEREaiwTQf3QzcBUwhNP/8Khp3IIuBeWY228yKCTuS7+o3\nz1rgDQBmNp8QCvndFDiQ0hp2lc5gSttymju6Yy1FRGS4DSYUGtz9ZnfviYZbgAP+XI+6xriKsD/i\nOcJRRs+a2TVmdl402yeA95vZk8BtwOXu3r+Jadh1TzyOYxKreGr97rhLEREZVgc8eQ3YbmaXEb60\nIewH2DGYhbv7PYQdyNnjPpt1exlw6uBKHT7Vhy2kdM3d/PrFlzh17j6tWSIiY9ZgthTeSzgcdTOw\nCbiY0PXFmFU6M+xsbn7p0ZgrEREZXoM5+mitu5/n7g3uPsHdLyCcyDZ2TTmeNEmqtv2VnnQm7mpE\nRIbNoV557eNDWsVIU1xO87gjOTaznOc360psIlI4DjUUcp2DMKakZp3EgsRLLF25Ne5SRESGzaGG\nQuxHCOVb5ZxTKLdONizXSWwiUjgGPPrIzJrJ/eVvQFneKhoppp8AgG14jEzmEhKJMb9xJCIycCi4\ne9VwFjLi1EynvXQix7QuY9mmJo6ZWhN3RSIieXeozUdjnxnMeg0nJZ7joRXxnmQtIjJcFAr7UTbv\nNBpsN6uWPxF3KSIiw0KhsD+zXgNAcs1f6OzRRXdEZOxTKOxP3WF0lE3kxMQyHl25M+5qRETybjBd\nZzebWVO/YV3UnfZhw1FkbMxImXNyYhkPPLc57mpERPJuMFsKXwX+kdBt9jTgk8D3CJfXvCl/pY0M\nqTd+gXprYu1zjzECOnAVEcmrwYTC2e7+XXdvdvcmd78BONfd/xeozXN98ZvzegAOb36MldtbYy5G\nRCS/BhMKGTNbZGaJaFiUNW3s/3SumkRXwzGclnySy296LO5qRETyajCh8E7gXcDWaHgXcJmZlREu\nojPmFR9xJgsTLzC5tCfuUkRE8mowXWevdPe3uHt9NLzF3Ve4e7u7/3k4iozd3DNIkaZ2y19Yt7Mt\n7mpERPJmMEcfTYuONNpqZlvM7GdmNm04ihsxpp9IurSWNyaXcM/Tm+KuRkQkbwbTfHQzcBcwhXAE\n0q+icYUjWUTyiHM4I/E437r/ubirERHJm8GEQoO73+zuPdFwC9CQ57pGnvlvocZaOa7naV7cogvv\niMjYNJhQ2G5ml5lZMhouA3bku7ARZ87f4EXlnJNczJ2Pb4i7GhGRvBhMKLwXWARsBjYBFwNX5LOo\nEamoDDv8LN5ctJS7/7qGTGbsH40rIoVnMEcfrXX389y9wd0nuPsFwFuHobaR59i3UZ1p5LCWpTz4\norrTFpGx51A7xPv4kFYxWsw9Ay+tYVHJw9z6yNq4qxERGXKHGgqFeW3KVAl21PmcaUt46Pm1bGhs\nj7siEZEhdaihULgN6sddQnGmjXPsUS7+9kNxVyMiMqQGDIUBusxuMrNmwjkLhWnmKVA3h7+v/gst\nnT20dKrrCxEZOwYMBXevcvfqHEOVu6eGs8gRxQyOfzdzO55mQucabn9M+xZEZOzI65XXzOxsM1tu\nZivM7Ooc079mZk9Ewwtm1pjPeobMgncAxodTv+DL9z5PR7cu1SkiY0PeQsHMksD1wDnAUcClZnZU\n9jzu/jF3X+DuC4D/Bu7MVz1DqnICHHMRbyp9kuJ0G9//86q4KxIRGRL53FI4AVgR9bLaRbhS2/n7\nmf9S4LY81jO0Tvogqe4WPjP1cb71wAq2NXfGXZGIyMuWz1CYCqzLur8+GrcPM5sJzAZ+P8D0K81s\niZkt2bZthJw0Nu1VUFzFxY030dnVxZu++ae4KxIRednyGQq5zmUY6FDWS4CfunvOxnl3v8HdF7r7\nwoaGEdQX3wXfoijdxpePfIntLZ28oI7yRGSUy2corAemZ92fBmwcYN5LGE1NR72OfDM0zOeC5ttI\nmHPxtx9Sn0giMqrlMxQWA/PMbLaZFRO++O/qP5OZHQHUAg/nsZb8SCTgdZ8kuWM5P6i5kaaOHn6k\nQ1RFZBTLWyi4ew/hGs6/AZ4D7nD3Z83sGjM7L2vWS4Hb3X10/sQ++kKYeCwnF6+goTTD5375jC7Z\nKSKjlo227+KFCxf6kiVL4i5jbyv/AD84n92n/gun/vkVHDO1mh+/7yQSicLsIkpERh4zW+ruCw80\nX15PXisYh50OZbXUPHQt/3rGRB5ZuZPTv/JA3FWJiBw0hcJQee9vALig6VbOPGoiGxs7WLx6Z8xF\niYgcHIXCUGk4AiomYIu/x9dOS5JMGJfe8Airt7fGXZmIyKApFIbSBx+C8noqf/sJ7vnQKVSVpnj3\nTY+xtbkj7spERAZFoTCUyuvgnC/DhqXMuf00powrY/2uNt5z02KaOrrjrk5E5IAUCkPtmIvgiHOh\naQO/XjSOW644gec3NXHyl+5nZ2tX3NWJiOyXQmGomcF5/w043Hgmr5tRzA3vXkhbV5pTrr1fl/AU\nkRFNoZAPFfVw2c8h0w0/fS9nHlnP7e8/iaJkgou+9ZD6SBKREUuhkC+zXwvjZsKK++B3n+XEw8Zz\nx9+dzI7WTs75xp9YosNVRWQEUijk04f/CidcCQ9fB0tvYf7kan7/idNJJYy3fedhrvv9i/SkM3FX\nKSLSR6GQb2d9CeaeAb/6KDx1B9Prynnsn8+grqKYr/z2Bd5+wyOs2aFzGURkZFAo5FsyBYt+CCXV\ncOf74dmfU1NexNL/dybfuGQBT6xr5G++8gdu/NNK0up2W0Ripg7xhktXK9x6Eax7DBb9D8x/CwCb\ndrdzztf/RGN7NxUlSWbWlXPPR14Xc7EiMtaoQ7yRprgC3vkTKCqH/30XLL8XgMk1ZTz+2TP55qWv\npLM7w7JNzbziC79h6ZpdMRcsIoVIWwrDrWM3fPWosOVw/vXwynf2TWrr6uGsrz3I+l3tOFBTVsSU\nmlLu+chrMVM33CJy6LSlMFKV1sDHnwt/f/lB+ON/QhTM5cUp/vRPr+eZL5zF1eccSWtnD89tbubo\nz/2GO5aso70r5yWsRUSGjLYU4tLTBXd9CJ66HSomwEeehOLyvWZp70pz7jceZHNTJ+3dIRAaKou5\n7h3Hc8LsOm09iMigDXZLQaEQJ3f445fhD9fCxGPCDujxc3LM5jy6aidX/fivbG8J/SeVpBLUV5Zw\n+5UnMb2ufJ/HiIhkUyiMJi/eB3e+DzJpOOvfYcE7IZG7Za+tq4d7n9nM5+96lqaOHgCqSlPUlhcz\nrqyIX151qrYgRGQfCoXRpnEt3HklrH04nNPw3nth4tH7fcgF1/+ZZZuaSZr1NS+VpBKMKy+KAuI1\nlBYlh6N6ERnhFAqjUSYDT/wI7v4oZHrglA/Daf8EJZUHfOi6nW286/uP0tjWTVNHN73nwVWXpqgu\nK6KmNGxFpJI6tkCkECkURrPWHXDf5+DxH0KyBC76Hsw/L3TLPQgd3WnOv+7PrNzeSlEyQVt01FLC\noKIkRUd3mpl15dx0+QlMrytTc5NIAVAojAVrH4EfXgjdbTDtBDjj8zDr1INezI6WTt7+3Ydp7uyh\npbOH1s49h7YWJQ13mFxTSkVJivLiJHd+8OCfQ0RGNoXCWJHugSduhXv+EdJdUFYL77kbJh1zyIvs\nTme48Pq/0BKFxI7WLrI/BgbUlBdRXpRkZ1sXcxsqueMDJ1NenHr5r0dEYqFQGGu62uCx78Lv/zUc\npXTc28P+hhyHsB6KxrYuLrnhEVZtbyWdcVJJo7M7Q/anwwwSZjRUFlNalGRLUwdHTqrmzg+eoiYo\nkRFOoTBWte+CP38dHvomeAbKxsM7bofpJwz5U3WnM1z0rYdo707T3pVmc1MHmejzkt2ha8KgtChJ\nV0+GidWllBUl2LC7g3kTKvnR+06ksiSl0BCJmUJhrGvZCo9+F/7y9XCk0vST4JQPwRHnDniOw1Bx\ndy781kMs39xExmFceREd3Wma2nvI9WkyAxzKS5IUJRO0dvZgwORxZRQlExQljOvfeTz1VSVUKUBE\n8kKhUCg6W+DxW+F3n4V0J6RK4fX/Dxa8A8rrhr2cju40b/vOQ6zY2oIDDZUldKed7S2dlBcn6ck4\n7V3pnOHRy4Dy4iRFqawAqSmjKGlhC6Shkh++70SqSxUgIoM1IkLBzM4GvgEkgRvd/doc8ywCPg84\n8KS7v2N/y1QoDCDdA8t+AY/dAOseBQxecQksfC9Me/WgD2cdLou+8xA9Gac7nWHF1hamjCujO51h\n0+4O3KGiJEl3evABkkwYbV1pasuLSSaMnW1dGDB1XBmphLGusZ25DRUkzVixrYWjJldzxwdOGaZX\nKxK/2EPBzJLAC8CZwHpgMXCpuy/LmmcecAfwenffZWYT3H3r/parUBiEzc/A0pthyc3g6dCv0sIr\n4NhFUFodd3UH7cABkiKdcdq6ekgmjHTGGcxF7JIJI5kwetIZDKgsLSKZMJo7uqmrKCZpxvbWEC7T\na8tIJoy1u0K4JKJwMVDAyKgwEkLhZODz7n5WdP/TAO7+pax5/gN4wd1vHOxyFQoHobMFnv4J/PZf\nwvUbLAHz3ghHnBP2PVROiLvCvOlOZ3j7dx8mnXHSGeelbS1Mqy2nJ+NsbGzH3amtKCadcRrbunGg\nNJUg7U5nd4aEGemD+N9IJoxMxikpSpBMGB3dIWhqyopImNHY3kVDZQmJhLGtuRMIWzFmsKGxHQNm\njq8gYbB6RxtzouAxg++/59UUpxKUpJIUJU1NZnJIRkIoXAyc7e7vi+6/CzjR3a/KmucXhK2JUwlN\nTJ9393tzLOtK4EqAGTNmvGrNmjV5qXnMcocNS0NALLk57HsAmPVaOPqCcLb0GA6IQ7XoOw+xbFMT\nDhxWX0k6k2HV9lam1ZaTzjgbGsPFkOorikm7s6O1i+rSItIZp6UjBE1RMkHGne700P2fGaE1MOPh\ndlEygVkIwrKiJAkz2rrTWaFYUp8GAAAQcUlEQVQEje3dAEyoKiFhxtbmTibXlGJmbNrdDsCM2nLM\nYO3ONmbXV/Dli15BUcooTiYoTiX6/hYlQ/D1/pXRYSSEwtuAs/qFwgnu/qGsee4GuoFFwDTgT8Ax\n7t440HK1pfAyucOWZ+G2S6B1O/SELwRmvw6OvjAEREV9vDWOUe5OZ0+Gzp4MV9z8GJmomWvFthYA\nZtaVk3Fn7c42ptaW4+6s3xXen4nVJWQctjZ1UF8Zbu9oDeFeU1aEO+xu76aiJEXGndbO0INuPkKp\nv/4hlUoahtGdyVCSSmAYnT3hLPry4hRm0NaVDocqAy1RrdVlRRjhdYwrD7d7w6yuohgDdrSGLS4z\n2BZ1Iz+xKtzf0hTWRwg72NTYwdTaMgxY3xgFX105Rgi+meMrMIM1O3pD8DiSCSMVNSumEgmSyXA/\nYdH4ZLjdG4XZG217xu49vnd5cW/hjYRQGEzz0XeAR9z9luj+/cDV7r54oOUqFIaQO2xdBs/+Ap79\nOex4MYyf+RqYdwbMPTP01KrmijEjk3E6etJ09WTo6slw5Q+W8GJ0pNhh9RVk3Fm1vZUZdeW4w9pd\nbQBMqSkj486m3R1MqCrBga3NneDO+MoSPCukxpUX4x6a5arLinB3mjvC4coVxUkcaOvsobQ4iXs4\nYg2gOJUAh850hqJkuN2dzgCQSBju3hc8o+uYyT2yAzSZCDGSjnaAFafCoeS9r7m3h+OO7jRlxUkM\nY3JNKb/7+GmH9twjIBRShKahNwAbCDua3+Huz2bNczZh5/N7zKweeBxY4O47BlquQiFPercglv0C\nHv4WdLeG8cnicBTT3DNh9mtDNxsiI0Bv8978SdU48Pzm0NR3+IQqHOfFLS3MnVCJZ22Nza6vwB1W\n7WhlVl05DqzZET7r02rDxarW7Wpj6rgy3An7nwhbH+6wuakDCFtu7iEYJ1SVALAl2lc0Mev+hKoS\ncNjaHB43vjJM297SSV1FMe6wqy1s8WRv8UG4Too7NHf2UFmSwt2ZVFPKbz82SkMhKuJc4OuE/QU3\nufsXzewaYIm732Vhe+q/gLOBNPBFd799f8tUKAyTpk2w4r7QW2t7YziKCaC4Al51RdgfMfPkcK1p\nERnxRkQo5INCIQbpbli/GFb9CR6+Hjqb6NuAn3QczHoNzDwFZpwCFeNjLVVEclMoSP50t8O6x2DN\nQ/DIt6GrOfTDBNBwJMw8NYTEzFOhenK8tYoIoFCQ4dTTCRsfhzV/CUHx0gN7mptSpXDsxSEgZpwM\ntbO041okBgoFiU+6BzY/FQJizUPw4m9Cp30AyaJwDepTPwpTXwWTXzGoy42KyMujUJCRI5OBbc+F\ngFi/OBzh1NO5Z3pROcx/C0xeAFMWwKRjoaQqvnpFxiCFgoxsLdtCk9OGpeHiQV2t4cpyvVKlMPeM\nEBATjwnnS6jpSeSQKRRk9GneDJueDE1Pm5+BF36z54xrgOKqEA6TjglBMelYmDA/HCYrIvs12FDQ\nRXdl5KiaFIbDz9ozrqsVtj4Hm5+GLc/AU3eEJqjeHdkA4+dGIXEMTDw2BEfNNG1ViBwCbSnI6OMO\njWvC1sSWZ0JgrLgPejr2zJNIhavRTTwa6ueFYfw8qJ6isJCCpC0FGbvMwv6F2lkw/817xnc0hb6c\nercqnv4ZrH1ozzkUELoPLyqDw8+B+sOh4fDwt24OFJUO9ysRGXEUCjJ2lFbDjJPCAPCWb4StiuZN\nsP3F0OHf9hXh73O/2tOFeK9USegMcPzcaJgT/tZMg0Ry+F+PSAwUCjK2mYUmo+opcFi/jsS62mDH\nCtj+QhQaK+CFe+Gl+/ddTlE5zHl9CIn6eXuCo3y8mqNkTFEoSOEqLofJx4Uhmzu0bAkh0Te8BCvu\nh+fv3nveRDKcX9F/62L8XB0VJaOSQkGkP7M9R0LNes3e09I9sHtt1AyVNTz7i32bo5LFMP3ErMCI\nhnEzIFU8fK9H5CAoFEQORjIFdYeFgTfuPa2rDXaujILiRXj0Btj4BKx9eE83H30s7AM56gKomw21\ns/f8La0erlcjsg8dkioyHNp27tmq2LkqXCu7pyOcnJcrMIor4YizQ0jUzgpbF+NmQPXUEEwiB0ln\nNIuMFh1NsGtVCItdq0J35D0d0N2xb5MUQLIkHCmVKoWFV+wJjL7QKBr+1yAjnkJBZCzo6YKm9dC4\ndu9h+f9BZzM5r1bcGxpHvmnvwFBoFDSdvCYyFqSKs/Zh5NDTBU0bcoTGPfDk7ew3NI44Z+/AqJke\nzslIleT1JcnIplAQGc1SxWEHdd3s3NOzQ2P3Oti1Jvx9/te5j5iCcNTUlONh3PS9A2PczBAaOvN7\nTFMoiIxlBwqNdDc0bdwTGtlbG8/dtfd1L3oli8PFkaqnRsOUcNnV3ttVk9VENYopFEQKWbIIameG\nIZd0T+gmpH9gNK7dt2vzbJUTo7DICoq+AImGorL8vS45ZAoFERlYMhU1I02HmafsO90dOnaH4Gja\nELY6mjbuub1zJbzwf5BJ7/vYRAoa5u8dFH1DFCC6At+wUyiIyKEzg7JxYZgwf+D5ulqhKTs4sgJk\n9YPhxL9cO8UtGfqa6g2Lqn6hUT0FymrV/9QQUiiISP4VV0D93DAMpKcz2uLot7XR+3f1n/e+ZGsv\nS4ST/PrCon9T1VQor4dEIn+vbwxRKIjIyJAq2XOdjIGke0JnhblCY8V9ITiAfbc6LDSBVU+N9m9k\nb21Efysn6mxxFAoiMpokU1AzNQy8Ovc8mQy0bc+9j6NpYziHI/sqfdn6mqcm7x0aVZNDaFQ2QEn1\nmG6uUiiIyNiSSEDlhDBMeWXuedyhfVfu0GjaANtegOfv2fta4H0snLdR2RCCoiL6Wzlh79uVE0If\nVqMsQBQKIlJ4zKC8LgyTjhl4vo6mPUdWtWyD1q2h+aplW/jbuBbWL4bW7eTcUZ4qiwJiIlRNhMpJ\nWX8nReMnjah9HnkNBTM7G/gGkARudPdr+02/HPhPYEM06jp3vzGfNYmIDFppdRgajtj/fOkeaNsR\nhUY09N3eEoZtL8CqB8MhvPuwPTvJq3qHidFWR++WxySoqM/7pWHzFgpmlgSuB84E1gOLzewud1/W\nb9b/dfer8lWHiEjeJVPhS7xq4oHn7W4PIdG8BVo2h7/Nm/YcebXt+dANSa6mq9rD4COPD339WfK5\npXACsMLdVwKY2e3A+UD/UBARKRxFZQc+ygr2hEf21saMHCcQDrF8hsJUYF3W/fXAiTnmu8jMXge8\nAHzM3df1n8HMrgSuBJgxY0YeShURGWEGGx5DLJ97NnLtcu+/J+ZXwCx3Pw64D/ifXAty9xvcfaG7\nL2xoaBjiMkVEpFc+Q2E9MD3r/jRgY/YM7r7D3Xu7Yfwe8Ko81iMiIgeQz1BYDMwzs9lmVgxcAtyV\nPYOZTc66ex7wXB7rERGRA8jbPgV37zGzq4DfEA5JvcndnzWza4Al7n4X8GEzOw/oAXYCl+erHhER\nOTBdo1lEpAAM9hrNI+MUOhERGREUCiIi0kehICIifUbdPgUz2wasOcSH1wPbh7CcsULrZV9aJ7lp\nvexrtKyTme5+wBO9Rl0ovBxmtmQwO1oKjdbLvrROctN62ddYWydqPhIRkT4KBRER6VNooXBD3AWM\nUFov+9I6yU3rZV9jap0U1D4FERHZv0LbUhARkf1QKIiISJ+CCQUzO9vMlpvZCjO7Ou564mJmq83s\naTN7wsyWROPqzOx3ZvZi9Lc27jrzzcxuMrOtZvZM1ric68GCb0afnafM7Pj4Ks+fAdbJ581sQ/R5\necLMzs2a9ulonSw3s7PiqTr/zGy6mT1gZs+Z2bNm9pFo/Jj8vBREKGRdL/oc4CjgUjM7Kt6qYvU3\n7r4g69jqq4H73X0ecH90f6y7BTi737iB1sM5wLxouBL49jDVONxuYd91AvC16POywN3vAYj+fy4B\njo4e863o/2ws6gE+4e7zgZOAf4he/5j8vBREKJB1vWh37wJ6rxctwfnsuerd/wAXxFjLsHD3Bwnd\ntWcbaD2cD/zAg0eAcf2uBTImDLBOBnI+cLu7d7r7KmAF4f9szHH3Te7+1+h2M+G6L1MZo5+XQgmF\nXNeLnhpTLXFz4LdmtjS69jXARHffBOEfAJgQW3XxGmg9FPrn56qoGeSmrKbFglwnZjYLeCXwKGP0\n81IooTCY60UXilPd/XjCJu4/mNnr4i5oFCjkz8+3gTnAAmAT8F/R+IJbJ2ZWCfwM+Ki7N+1v1hzj\nRs26KZRQOOD1oguFu2+M/m4Ffk7Y5N/Su3kb/d0aX4WxGmg9FOznx923uHva3TOE66j3NhEV1Dox\nsyJCIPzI3e+MRo/Jz0uhhMIBrxddCMyswsyqem8DbwSeIayL90SzvQf4ZTwVxm6g9XAX8O7oqJKT\ngN29zQZjXb+28AsJnxcI6+QSMysxs9mEnaqPDXd9w8HMDPg+8Jy7fzVr0pj8vOTtGs0jyUDXi465\nrDhMBH4ePuOkgB+7+71mthi4w8z+FlgLvC3GGoeFmd0GnA7Um9l64HPAteReD/cA5xJ2prYBVwx7\nwcNggHVyupktIDR/rAb+DiC63vodwDLC0Tn/4O7pOOoeBqcC7wKeNrMnonH/zBj9vKibCxER6VMo\nzUciIjIICgUREemjUBARkT4KBRER6aNQEBGRPgoFERHpo1AQGQQzW9Cv2+jzhqoLdjP7qJmVD8Wy\nRF4unacgMghmdjmw0N2vysOyV0fL3n4Qj0mO4ZPFJEbaUpAxxcxmRRdD+V50QZTfmlnZAPPOMbN7\nox5j/2RmR0bj32Zmz5jZk2b2YNQ1yjXA26MLzbzdzC43s+ui+W8xs29HF2JZaWanRT2KPmdmt2Q9\n37fNbElU1xeicR8GpgAPmNkD0bhLLVwI6Rkz+3LW41vM7BozexQ42cyuNbNlUQ+mX8nPGpWC4+4a\nNIyZAZhF6HZhQXT/DuCyAea9H5gX3T4R+H10+2lganR7XPT3cuC6rMf23SdcnOZ2Qu+Y5wNNwLGE\nH11Ls2qpi/4mgT8Ax0X3VwP10e0phC4TGghdkfweuCCa5sCi3mUBy9mztT8u7nWvYWwM2lKQsWiV\nu/f2UbOUEBR7ibpBPgX4SdSfzXeB3s7f/gLcYmbvJ3yBD8av3N0JgbLF3Z/20LPos1nPv8jM/go8\nTrhiWa6r/70a+IO7b3P3HuBHQG/35mlCT50QgqcDuNHM3kroY0fkZSuIDvGk4HRm3U4DuZqPEkCj\nuy/oP8HdP2BmJwJvAp6IOoQb7HNm+j1/BkhFPYl+Eni1u++KmpVKcywnV1/8vTo82o/goZPHE4A3\nEHr9vQp4/SDqFNkvbSlIQfJwkZRVZvY26LvY+iui23Pc/VF3/yywndA3fjNQ9TKeshpoBXab2UTC\nRY56ZS/7UeA0M6uPrnl8KfDH/guLtnRqPFwz+aOEi+CIvGzaUpBC9k7g22b2GaCIsF/gSeA/zWwe\n4Vf7/dG4tcDVUVPTlw72idz9STN7nNCctJLQRNXrBuD/zGyTu/+NmX0aeCB6/nvcPdf1LaqAX5pZ\naTTfxw62JpFcdEiqiIj0UfORiIj0UfORjHlmdj3h6lnZvuHuN8dRj8hIpuYjERHpo+YjERHpo1AQ\nEZE+CgUREemjUBARkT7/H4nRIqP9YtMNAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1e60e3eaf60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1e60f0eff98>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[50:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(50,cvresult.shape[0]+50)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(5, 5), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'n_estimators' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-38-d8b760902571>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mn_estimators\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m: name 'n_estimators' is not defined"
     ]
    }
   ],
   "source": [
    "n_estimators"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
